%generate_sine_data(256, 256, 'sine.coe') ;
% 假设给定时钟 125 MHz，即时钟周期为 8 ns，每输出一个采样点需要 8 ns
% 输出256个正弦波的采样点需要 256×8 ns，即正弦波的周期为 256×8 ns 

% DDS输出频率 = 系统时钟频率 / 位深(2^N) * 频率控制字(K)
% 即频率为 125MHz / 256 * 1 = 0.488 MHz 左右


function generate_sine_data(Fs_N, Bit_Width, fileName)
    t=0:2*pi/Fs_N:2*pi;
    y=0.5*sin(t)+0.5; % (-0.5~0.5)+0.5 ->(0~1)，转成无符号数
    % r=ceil(y*(Bit_Width-1));      % 量化，向上取整
    % r=floor(y*(Bit_Width-1));     % 量化，向下取整
    r=round(y*(Bit_Width-1));       % 量化，四舍五入
     
    fid = fopen(fileName,'w');  % 写入 'sin.coe' 文件
    fprintf(fid,'MEMORY_INITIALIZATION_RADIX=10;\n');   % 固定写法，表示写入的数据是 10进制 表示
    fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n');     % 固定写法，下面开始写入数据
    for i = 1:1:Fs_N
        fprintf(fid,'%d',r(i));
        if i==Fs_N
            fprintf(fid,';\n');   % 最后一个数据用 ;
        else
            fprintf(fid,',\n');    % 其他数据用 ,
        end
    end
    fclose(fid);                     % 写完了，关闭文件
end


